package br.com.megasena.main;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;

import br.com.megasena.converter.MegaSenaConverter;
import br.com.megasena.file.decompress.MegaSenaDecompress;
import br.com.megasena.file.download.MegaSenaDownload;
import br.com.megasena.to.SenaResultTO;

public class MegaSenaInit {

	static Logger log = Logger.getLogger(MegaSenaInit.class.getName());

	public void teste() throws Exception {
		BasicConfigurator.configure();

		File zippedFile = MegaSenaDownload.downloadFile();

		File resultFile = MegaSenaDecompress.decompressFile(zippedFile);

		Set<SenaResultTO> resultados = MegaSenaConverter
				.createResults(resultFile);

		Map<Integer, Integer> dezenasMaisJogadas = new TreeMap<Integer, Integer>();

		for (SenaResultTO senaResultTO : resultados) {

			if (!dezenasMaisJogadas.containsKey(senaResultTO.getJogo()
					.getDezena1())) {
				dezenasMaisJogadas.put(senaResultTO.getJogo().getDezena1(), 1);
			} else {
				dezenasMaisJogadas.put(senaResultTO.getJogo().getDezena1(),
						dezenasMaisJogadas.get(senaResultTO.getJogo()
								.getDezena1()) + 1);
			}

			if (!dezenasMaisJogadas.containsKey(senaResultTO.getJogo()
					.getDezena2())) {
				dezenasMaisJogadas.put(senaResultTO.getJogo().getDezena2(), 1);
			} else {
				dezenasMaisJogadas.put(senaResultTO.getJogo().getDezena2(),
						dezenasMaisJogadas.get(senaResultTO.getJogo()
								.getDezena2()) + 1);
			}

			if (!dezenasMaisJogadas.containsKey(senaResultTO.getJogo()
					.getDezena3())) {
				dezenasMaisJogadas.put(senaResultTO.getJogo().getDezena3(), 1);
			} else {
				dezenasMaisJogadas.put(senaResultTO.getJogo().getDezena3(),
						dezenasMaisJogadas.get(senaResultTO.getJogo()
								.getDezena3()) + 1);
			}

			if (!dezenasMaisJogadas.containsKey(senaResultTO.getJogo()
					.getDezena4())) {
				dezenasMaisJogadas.put(senaResultTO.getJogo().getDezena4(), 1);
			} else {
				dezenasMaisJogadas.put(senaResultTO.getJogo().getDezena4(),
						dezenasMaisJogadas.get(senaResultTO.getJogo()
								.getDezena4()) + 1);
			}

			if (!dezenasMaisJogadas.containsKey(senaResultTO.getJogo()
					.getDezena5())) {
				dezenasMaisJogadas.put(senaResultTO.getJogo().getDezena5(), 1);
			} else {
				dezenasMaisJogadas.put(senaResultTO.getJogo().getDezena5(),
						dezenasMaisJogadas.get(senaResultTO.getJogo()
								.getDezena5()) + 1);
			}

			if (!dezenasMaisJogadas.containsKey(senaResultTO.getJogo()
					.getDezena6())) {
				dezenasMaisJogadas.put(senaResultTO.getJogo().getDezena6(), 1);
			} else {
				dezenasMaisJogadas.put(senaResultTO.getJogo().getDezena6(),
						dezenasMaisJogadas.get(senaResultTO.getJogo()
								.getDezena6()) + 1);
			}

		}

		List<Map.Entry> a = new ArrayList<Map.Entry>(
				dezenasMaisJogadas.entrySet());
		Collections.sort(a, new Comparator() {
			public int compare(Object o1, Object o2) {
				Map.Entry e1 = (Map.Entry) o1;
				Map.Entry e2 = (Map.Entry) o2;
				return ((Comparable) e1.getValue()).compareTo(e2.getValue());
			}
		});

		for (Map.Entry e : a) {
			log.debug(e);
		}

	}

	public static void main(String[] args) throws Exception {

		new MegaSenaInit().teste();
	}

}
